#pragma once

#include "GSharpStruct.h"
#include "Reflection/DecoratedType.h"

class CGSharpGenericStruct : public CGSharpStruct
{

public:

    CGSharpGenericStruct(
        const STypeID &InTypeID
        ,const TVector<STypeID> & InPlaceholders
    );

protected:
    CType* FindGenerialized(const TVector<SDecoratedType> & InArguments);
    CType* Generialize(
        const TVector<SDecoratedType> & InArguments
        ,const STypeID & InGenerializedTypeID
        );

    static bool IsValidArgument(const TVector<SDecoratedType> & InArguments);

    static CType* GenerializeType(
        const SDecoratedType & InType
        ,const TVector<SDecoratedType> &InGenericTypeArguments
    );
};